
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import javax.swing.JOptionPane;

/**
 *
 * @author anderzanic
 */
public class Start {

    private static Jogador jogador;
    private static ServicoRemoto servicoRemoto;

    public static void main(String[] args) {

        Start start = new Start();
        start.start();
    }

    private void start() {
        login();
    }

    private void login() {
        new Login(this).setVisible(true);
    }
    
    public void selecionarAtuacao(Login login) {

        login.close();
        String[] options = new String[]{Jogador.MESTRE, Jogador.ADIVINHO};
        boolean escolhido = false;
        
        String atu = "";
        
        while(!escolhido) {
            int choice = JOptionPane.showOptionDialog(null, null, "Atuação", 0, 3, null, options, 0);
            switch (choice) {
                case 0:
                    atu = Jogador.MESTRE;
                    escolhido = true;
                    break;
                case 1:
                    atu = Jogador.ADIVINHO;
                    escolhido = true;
                    break;
                default:
                    JOptionPane.showMessageDialog(null, "Escolha uma das opções entre " + Jogador.MESTRE + " ou " + Jogador.ADIVINHO);
            }
        }

        jogador.setAtuacao(atu);
        addJogadorAoJogo();
    }
    
    public void addJogadorAoJogo() {
        try {
            getServicoRemoto().setJogadores(jogador);
        } catch (RemoteException ex) {
            JOptionPane.showMessageDialog(null,"Erro ao adicionar o usuário ao jogo");
            System.exit(0);
        }
        
        if(jogador.isMestre()) {
            try {
                String secreta = JOptionPane.showInputDialog("Palavra Secreta:");
                String dica = JOptionPane.showInputDialog("Dica:");
                
                getServicoRemoto().setPalavraEDica(secreta, dica);
            } catch (RemoteException ex) {
                JOptionPane.showMessageDialog(null,"Erro ao enviar a palavra secreta! Erro: " + ex);
            }
        } else{
            try {
                if(getServicoRemoto().getJogo().getPalavra() == null){
                    JOptionPane.showMessageDialog(null, "Aguardar a definição de uma palavra secreta!");
                    (new AguardarPalavra()).start();
                }
            } catch (RemoteException ex) {
                JOptionPane.showMessageDialog(null,"Erro ao pegar palavra secreta! Erro: " + ex);
            }
        }
    }
    
    public void setJogador(Jogador j) {
        jogador = j;
    }

    public static ServicoRemoto getServicoRemoto() {
        if (servicoRemoto == null) {
            try {
                servicoRemoto = (ServicoRemoto) Naming.lookup("rmi://localhost:1099/ServicoRemoto");
            } catch (NotBoundException | MalformedURLException | RemoteException e) {
                throw new RuntimeException(e.getMessage());
            }
        }
        return servicoRemoto;
    }
}
